package com.example.propertymanagement.service;

import com.example.propertymanagement.dto.PetDTO;
import com.example.propertymanagement.entity.Owner;
import com.example.propertymanagement.entity.Pet;
import com.example.propertymanagement.repository.PetRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

/**
 * PetService：宠物信息的业务逻辑处理层
 */
@Service
public class PetService {

    @Autowired
    private PetRepository petRepository;

    /**
     * 获取所有宠物信息
     * @return List<PetDTO> 宠物信息列表
     */
    public List<PetDTO> getAllPets() {
        List<Pet> pets = petRepository.findAll();
        return pets.stream().map(this::convertToDTO).collect(Collectors.toList());
    }

    /**
     * 根据业主ID获取宠物信息
     * @param ownerId 业主ID
     * @return List<PetDTO> 宠物信息列表
     */
    public List<PetDTO> getPetsByOwnerId(Integer ownerId) {
        List<Pet> pets = petRepository.findByOwnerId(ownerId);
        return pets.stream().map(this::convertToDTO).collect(Collectors.toList());
    }

    /**
     * 将 Pet 实体转换为 PetDTO
     * @param pet 宠物实体
     * @return PetDTO 数据传输对象
     */
    private PetDTO convertToDTO(Pet pet) {
        PetDTO dto = new PetDTO();
        dto.setId(pet.getId());
        dto.setPetPhoto(pet.getPetPhoto());
        dto.setOwnerName(pet.getOwner() != null ? pet.getOwner().getMemberName() : "未知");  // 从 Owner 实体获取业主名称
        dto.setPetName(pet.getPetName());
        dto.setColor(pet.getColor());
        dto.setRemark(pet.getRemark());
        dto.setAdoptionDate(pet.getAdoptionDate());
        dto.setCreateTime(pet.getCreateTime());
        return dto;
    }

    /**
     * 添加宠物信息
     * @param petDTO 宠物信息
     * @return PetDTO 新添加的宠物信息
     */
    public PetDTO addPet(PetDTO petDTO) {
        Pet pet = new Pet();
        pet.setPetPhoto(petDTO.getPetPhoto());
        pet.setPetName(petDTO.getPetName());
        pet.setColor(petDTO.getColor());
        pet.setRemark(petDTO.getRemark());
        pet.setAdoptionDate(petDTO.getAdoptionDate());
        pet.setCreateTime(new java.util.Date());

        // 根据业主的 ID 获取业主对象，而不是通过名字
        if (petDTO.getOwnerId() != null) {
            Owner owner = new Owner();
            owner.setId(petDTO.getOwnerId());  // 设置业主ID
            pet.setOwner(owner);  // 直接将 Owner 设置为 pet 的 owner
        }

        Pet savedPet = petRepository.save(pet);
        return convertToDTO(savedPet);
    }

    /**
     * 更新宠物信息
     * @param petId 宠物ID
     * @param petDTO 更新后的宠物信息
     * @return PetDTO 更新后的宠物信息
     */
    public PetDTO updatePet(Integer petId, PetDTO petDTO) {
        Pet pet = petRepository.findById(petId).orElse(null);
        if (pet != null) {
            pet.setPetPhoto(petDTO.getPetPhoto());
            pet.setPetName(petDTO.getPetName());
            pet.setColor(petDTO.getColor());
            pet.setRemark(petDTO.getRemark());
            pet.setAdoptionDate(petDTO.getAdoptionDate());
            pet.setCreateTime(new java.util.Date());
            Pet updatedPet = petRepository.save(pet);
            return convertToDTO(updatedPet);
        }
        return null;
    }

    /**
     * 删除宠物信息
     * @param petId 宠物ID
     */
    public void deletePet(Integer petId) {
        petRepository.deleteById(petId);
    }
}